"""
高级按钮组件 - 提供丰富的按钮样式和功能
"""

class 高级按钮:
    """增强的按钮组件，支持图标、加载状态等"""

    def __init__(self, 文字="", 图标路径=None, 样式名称="primary_button", 主题="light"):
        self.文字 = 文字
        self.图标路径 = 图标路径
        self.样式名称 = 样式名称
        self.主题 = 主题
        self._点击事件 = None
        self._实际按钮 = None
        self._样式规则 = None

    def _创建实际按钮(self):
        """实际创建Qt按钮对象"""
        if self._实际按钮 is None:
            # 延迟导入，避免循环导入
            from PySide6.QtWidgets import QPushButton
            from PySide6.QtGui import QIcon
            from PySide6.QtCore import QSize
            from 方圆.核心 import _安全创建控件

            self._实际按钮 = _安全创建控件(QPushButton, self.文字)

            if self.图标路径:
                self._实际按钮.setIcon(QIcon(self.图标路径))
                self._实际按钮.setIconSize(QSize(16, 16))

            if self._点击事件:
                self._实际按钮.clicked.connect(self._点击事件)

            if self._样式规则:
                self._应用样式(self._样式规则)

    def 应用样式(self, 样式规则):
        """应用样式到按钮"""
        self._样式规则 = 样式规则
        if self._实际按钮:
            self._应用样式(样式规则)

    def _应用样式(self, 样式规则):
        """内部样式应用方法"""
        样式字符串 = ""
        for 键, 值 in 样式规则.items():
            样式字符串 += f"{键.replace('_', '-')}: {值};"
        self._实际按钮.setStyleSheet(样式字符串)

    def 设置加载状态(self, 加载中=True, 加载文字="加载中..."):
        """设置加载状态"""
        self._创建实际按钮()
        if 加载中:
            self.原始文字 = self._实际按钮.text()
            self._实际按钮.setText(加载文字)
            self._实际按钮.setEnabled(False)
        else:
            self._实际按钮.setText(getattr(self, '原始文字', self.文字))
            self._实际按钮.setEnabled(True)

    def 设置图标(self, 图标路径, 大小=16):
        """设置按钮图标"""
        self._创建实际按钮()
        from PySide6.QtGui import QIcon
        from PySide6.QtCore import QSize
        self._实际按钮.setIcon(QIcon(图标路径))
        self._实际按钮.setIconSize(QSize(大小, 大小))

    # 获取实际的Qt按钮对象（用于添加到布局）
    def 获取Qt对象(self):
        """获取底层的Qt按钮对象"""
        self._创建实际按钮()
        return self._实际按钮

    # 简化使用：直接当作QPushButton使用
    def __getattr__(self, name):
        self._创建实际按钮()
        return getattr(self._实际按钮, name)


def 创建按钮(文字="", 图标=None, 样式="primary", 主题="light", 点击事件=None):
    """快速创建按钮"""
    样式映射 = {
        "primary": "primary_button",
        "secondary": "secondary_button",
        "outline": "outline_button"
    }

    按钮实例 = 高级按钮(文字, 图标, 样式映射.get(样式, "primary_button"), 主题)

    if 点击事件:
        按钮实例._点击事件 = 点击事件

    # 尝试应用样式（但不强制创建按钮）
    try:
        from 方圆.样式.主题 import 获取样式
        样式规则 = 获取样式(样式映射.get(样式, "primary_button"), 主题)
        按钮实例.应用样式(样式规则)
    except ImportError:
        pass  # 样式模块不可用也没关系

    return 按钮实例